package com.bicon.botu.mall.order.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.bicon.botu.core.base.common.entity.BaseResult;
import com.bicon.botu.mall.order.dto.*;
import com.bicon.botu.mall.order.entity.OrderGoods;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 总订单Service
 *
 * @author 李双喜
 * @date 2018/5/14 11:50
 */
public interface IOrderGoodsService extends IService<OrderGoods> {

    /**
     * 删除订单
     *
     * @param orderId 订单id
     * @return
     */
    boolean deleteOrder(String orderId,String userId);

    /**
     * 取消订单
     *
     * @param orderId      订单id
     * @param cancelReason 取消订单原因
     * @return
     */
    boolean cancelOrder(String orderId, String cancelReason,String userId);

    /**
     * 我的订单模块 根据搜索框内容或状态查询数据
     *
     * @param page
     * @param userId
     * @param payState
     * @param condition
     * @return
     */
    public Page<OrderGoodsDto> getPageByPayCondition(Page<OrderGoodsDto> page, String userId, Integer payState, String condition);


    /**
     * 多条件查询订单列表
     *
     * @param page
     * @param paramMap
     * @return
     */
    public Page<OrderGoodsAndAddressDto> getOrderPageByCondition(Page<OrderGoodsAndAddressDto> page, Map<String, String> paramMap);

    /**
     * 订单详情页 修改运费及优惠费
     *
     * @param orderGoodsId
     * @param discountMoney
     * @param freight
     * @return
     */
    public boolean updateCost(String orderGoodsId, Double discountMoney, Double freight,String userId);

    /**
     * 根据商家ID 统计订单总数、待付款、待收货等状态对应数量
     *
     * @param storeId
     * @param payStateArray
     * @return
     */
    public List<TotalPriceDTO> getOrderTotalByStoreId(String storeId, List<String> payStateArray);

    /**
     * 根据商家ID 统计提醒订单总数、待付款、待收货等状态对应数量
     *
     * @param storeId
     * @return
     */
    public List<TotalPriceDTO> getWarnOrderTotalByStoreId(String storeId);

    /**
     * 根据订单ID集合 查询订单及地址组全对象
     * @param orderGoodsIds 订单ID集合
     * @return
     */
    public List<BatchDeliverGoodsDTO> getOrderGoodsAndAddressByIds(List<String> orderGoodsIds);


    /**
     *  根据订单ID集合 查询订单及地址组全对象 及订单商品分类、商品总数量
     * @param orderGoodsIds
     * @return
     */
    public List<BatchDeliverGoodsDTO> gatPrintTrackingInfo(List<String> orderGoodsIds);


    /**
     * 导出订单列表，返回Excel文件的URL
     *
     * @param params
     * @param sortType
     * @param sortDirection
     * @return
     */
    String exportOrder(Map<String, String> params, String sortType, String sortDirection,
                       HttpServletRequest request, HttpServletResponse response);

    /**
     * 统计顾客支付数量
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<CustomerStatisticsDTO> customersStatistics(String startTime, String endTime);

    /**
     * 已完成支付的订单数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> paidStatistics(String startTime, String endTime);

    /**
     * 已完成支付的订单金额
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> paidMoneyStatistics(String startTime, String endTime);

    /**
     * 交易成功的订单数量
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> doneOrderStatistics(String startTime, String endTime);

    /**
     * 交易成功的订单金额
     * @param startTime
     * @param endTime
     * @return
     */
    List<CustomerStatisticsDTO> doneOrderMoneyStatistics(String startTime, String endTime);


    /**
     * 跟据订单号查询售后记录
     * @param orderGoodsId
     * @param type
     * @return
     */
    List<OrderGoodsAfterSalesDto> queryOrderGoodsAfterSales(String orderGoodsId, Integer type);
}
